package com.tang.crm.controller;

import com.tang.crm.base.BaseController;
import com.tang.crm.base.ResultInfo;
import com.tang.crm.dto.RoleDto;
import com.tang.crm.entity.Role;
import com.tang.crm.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 权限管理
 * @author SHIRELY阳
 */
@Controller
@RequestMapping("/role")
public class RoleController extends BaseController {

    @Autowired
    private RoleService roleService;

    /**
     * 查询所有的角色列表
     * @param userId
     * @return
     */
    @RequestMapping("/queryAllRoles")
    @ResponseBody
    public List<Map<String, Object>> selectRoleList(Integer userId){
        return roleService.selectRoleList(userId);
    }

    /**
     * 分页条件查询角色列表
     * @param roleDto
     * @return
     */
    @RequestMapping("/list")
    @ResponseBody
    public Map<String,Object> selectByParams(RoleDto roleDto){
        return roleService.selectByParams(roleDto);
    }

    /**
     * 进入角色管理页面
     * @return
     */
    @RequestMapping("/index")
    public String index(){
        return "role/role";
    }

    /**
     * 进入添加/更新角色信息的页面
     * @param roleId
     * @param request
     * @return
     */
    @RequestMapping("/toAddOrUpdateRolePage")
    public String toAddOrUpdateRolePage(Integer roleId, HttpServletRequest request){
        // 如果roleId不为空，则表示修改操作，通过角色ID查询角色记录，存到请求域中
        if (roleId != null){
            Role role = roleService.getById(roleId);
            // 将数据放入到请求域中
            request.setAttribute("role", role);
        }
        return "role/add_update";
    }

    /**
     * 添加角色
     * @param role
     * @return
     */
    @PostMapping("/add")
    @ResponseBody
    public ResultInfo addRole(Role role){
        roleService.addRole(role);
        return success("添加角色成功");
    }

    /**
     * 更新角色信息
     * @param role
     * @return
     */
    @PostMapping("/update")
    @ResponseBody
    public ResultInfo updateRole(Role role){
        roleService.updateRole(role);
        return success("更新角色信息成功");
    }

    /**
     * 删除角色
     * @param roleId
     * @return
     */
    @PostMapping("/delete")
    @ResponseBody
    public ResultInfo deleteRole(Integer roleId){
        roleService.deleteRole(roleId);
        return success("删除角色成功");
    }

    /**
     * 添加权限
     * @param roleId
     * @param mIds
     * @return
     */
    @PostMapping("/addGrant")
    @ResponseBody
    public ResultInfo addGrant(Integer roleId, Integer[] mIds){
        roleService.addGrant(roleId, mIds);
        return success("添加权限成功");
    }
}
